package com.gxar.file.server.db.service.strategy;

import com.gxar.file.server.base.common.enums.ProductEnum;
import com.gxar.file.server.base.model.upload.request.FilePartUploadRequest;
import com.gxar.file.server.base.model.upload.response.FilePartUploadResponse;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;

/**
 * @author linsy
 * @version 1.0
 * @created 2023/7/12 21:02
 */
public interface TargetChannelStrategy {

    /**
     * 获取目标渠道
     *
     * @return 目标渠道
     */
    String getTargetChannel();

    /**
     * 上传文件
     *
     * @param productEnum 产品
     * @param fileName    文件名
     * @param streamFile  文件
     * @param publicRead  是否公共读
     * @return 是否成功
     */
    Boolean uploadFile(ProductEnum productEnum, String fileName, InputStream streamFile, Boolean publicRead);

    /**
     * 下载文件
     *
     * @param productEnum 产品
     * @param fileKey     文件名
     * @param response    响应
     * @return 下载错误信息
     */
    String downloadFile(ProductEnum productEnum, String fileKey, HttpServletResponse response);

    /**
     * 获取文件地址
     *
     * @param product 产品名称
     * @param name    文件名称
     * @return 文件地址
     */
    String getFileUrl(ProductEnum product, String name);

    /**
     * 分片上传文件
     *
     * @param product 产品
     * @param name    文件名
     * @param request 请求
     * @param file    文件
     * @return 分片上传结果
     */
    FilePartUploadResponse uploadPartFile(ProductEnum product, String name, FilePartUploadRequest request, MultipartFile file);

    /**
     * 删除文件
     *
     * @param productName 产品名称
     * @param fileName    文件名称
     */
    void deleteFile(String productName, String fileName);

}
